<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Uncategorized Archives | LobsterPot Solutions</title>
	<atom:link href="https://lobsterpot.com.au/blog/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://lobsterpot.com.au/blog/category/uncategorized/</link>
	<description></description>
	<lastBuildDate>Tue, 14 Apr 2026 02:28:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lobsterpot.com.au/wp-content/uploads/2022/02/cropped-LobsterPot_ICON-32x32.png</url>
	<title>Uncategorized Archives | LobsterPot Solutions</title>
	<link>https://lobsterpot.com.au/blog/category/uncategorized/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Presentations with impact!</title>
		<link>https://lobsterpot.com.au/blog/2026/04/14/presentations-with-impact/</link>
					<comments>https://lobsterpot.com.au/blog/2026/04/14/presentations-with-impact/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 02:28:29 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6356</guid>

					<description><![CDATA[<p>I like this topic from the legendary Steve Hughes. It’s been a long time since I’ve seen him, but he was always a thoroughly good guy. We both spoke at conferences back in the heyday of the SQL community, and although his journey has been tougher than most in recent years, he is still impacting [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/04/14/presentations-with-impact/">Presentations with impact!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I like this topic from the legendary Steve Hughes. It’s been a long time since I’ve seen him, but he was always a thoroughly good guy. We both spoke at conferences back in the heyday of the SQL community, and although his journey has been tougher than most in recent years, he is still impacting the world in amazing ways.</p>



<p>Steve is hosting this month’s T-SQL Tuesday, and <a href="https://dataonwheels.wordpress.com/2026/04/07/t-sql-tuesday-197-an-impactful-session-or-two-from-a-conference/" target="_blank" rel="noreferrer noopener">asks about what we’ve learned from conference sessions</a>, things which impacted us and how we work. It&#8217;s an interesting topic for two reasons &#8211; firstly, I enjoy giving conference presentations, and secondly, they&#8217;re really not my preferred way of learning.</p>



<p>Don&#8217;t get me wrong &#8211; conferences are a great way to learn things for a lot of people. I just find that my brain isn&#8217;t wired for learning during sessions. If I&#8217;m at a conference, I&#8217;m probably learning more from conversations, and from hearing what people are saying outside the sessions they&#8217;re giving. But this is part of why I enjoy giving presentations. Let me explain, by way of describing some sessions where I definitely did learn something.</p>



<p>I’m not sure which things I learned in conference sessions per se, rather than at conferences in general. I remember an incredibly insightful session at an MVP Summit in 2023 where a few things about Fabric really clicked in ways they hadn’t before. It was so insightful that I grabbed a few others who hadn’t been there (Alex Whittles comes to mind) to join the rest of Bogdan Crivat’s session. But I can’t say it impacted the way I work &#8211; just that it set a stronger foundation than what I’d had before. And also, it wasn&#8217;t a &#8220;traditional&#8221; session, with someone talking in front of hundreds of people. There were a dozen or so of us in a fairly small room, and Bogdan was writing on a whiteboard.</p>



<p>Whereas, a session from TechEd Australia 2005 impacted me a lot.</p>



<p>It was my second TechEd event (the first was 1999), but the first after I learned the significance of the technical community. And I&#8217;d become a regular presenter myself, just not large events yet. I couldn’t tell you about many of the sessions I attended (I learned a lot more in the expo hall that year), but one session certainly had an impact. It was about security, and the speaker was Microsoft’s Jesper Johansson. LinkedIn tells me he now works for Walmart. <a href="https://www.linkedin.com/in/jesperjo" target="_blank" rel="noreferrer noopener">https://www.linkedin.com/in/jesperjo</a></p>



<p>Of course there were things about security that I learned that day, although I couldn’t tell you much about that. The impact that he had on me was more than that. He held the audience’s attention like few technical presenters I’d seen before. I had done user group presentations and spoken in church plenty of times. I understood the need to connect with an audience, but Jesper validated the significance of that for technical sessions. I could remember university lecturers who connected with the room, but mostly that only applied if you were already interested in the subject matter. Jesper was attracting an audience who didn’t even care that much about security. He was leaving a mark. People were learning. Really learning.</p>



<p class="has-text-align-left">Jesper’s session inspired me to aim for a style that would engage people. Technical sessions that would be interesting to people who didn’t necessarily have a background in the material. I wanted to be able to grab the attention of the people in the room (or at least most of them), and hold onto it. To teach their hearts and not just their minds, hopefully so they would leave changed. I try to do the same with my consulting, with the people I encounter in life in general. Of course I’m not always successful at that, but I do ask myself what people need from me whether I’m teaching a large room, a small room, or an individual. Sometimes it’s just a one-on-one conversation, but I&#8217;m there for the audience. I&#8217;m not trying to perform to be entertaining or interesting to them, I&#8217;m genuinely interested in the people who are there and I want to create that connection.</p>



<p>I know that my first TechEd Australia presentation didn&#8217;t achieve that. But I hope some of my presentations since then have. I try not to be bound by a slide deck or script (although I&#8217;ll have an idea about how the talk will go, and may have even used slides during the preparation), and instead reach into the room and be led by how the people are responding (definitely harder for online presentations, I know). I learn my material well, so that I have the freedom to explain it in ways that work that day, whether it&#8217;s through demos, whiteboards, flip-charts, or something else. It means I&#8217;m not a typical presenter, and while some audience members don&#8217;t like my presentation style, I hope that enough of them do. I&#8217;ve had a lot of good feedback from a lot of sessions, and even seen some other presenters adopt similar styles with great success.</p>



<p>I&#8217;m keen to see which sessions other people mention in response to Steve&#8217;s blog party this month, because I feel like there&#8217;s always something to learn about presenting. When I hear people saying that someone blew their mind, I want to know what it was that caused that. I would encourage every conference presenter to learn from the posts that respond to Steve&#8217;s question, and to inspire to blow people&#8217;s mind, to change their lives, and leave them different. I mean, why wouldn’t you?</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/04/14/presentations-with-impact/">Presentations with impact!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/04/14/presentations-with-impact/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Career risks?</title>
		<link>https://lobsterpot.com.au/blog/2026/03/10/career-risks/</link>
					<comments>https://lobsterpot.com.au/blog/2026/03/10/career-risks/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 01:38:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6353</guid>

					<description><![CDATA[<p>My old friend James Serra asks about what we’ve done where we weren’t sure that things would work out. I&#8217;m sure you know I&#8217;m a business owner. I’ve had my company since 2008. Sure, there have been ups and downs over that time, but in general it’s been good. We take on clients who want [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/03/10/career-risks/">Career risks?</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>My old friend <a href="https://jamesserra.com">James Serra</a> asks about <a href="https://www.jamesserra.com/archive/2026/03/t-sql-tuesday-192-what-career-risks-have-you-taken/" target="_blank" rel="noreferrer noopener">what we’ve done where we weren’t sure that things would work out</a>.</p>



<p>I&#8217;m sure you know I&#8217;m a business owner. I’ve had my company since 2008. Sure, there have been ups and downs over that time, but in general it’s been good. We take on clients who want our services, but also try to maintain a level of flexibility with our time so that we can be responsive to whatever happens. Even if I&#8217;m spending most days at a particular client, I try to make sure I can respond to other things. Because just like how an employee might get sick, another client might have an urgent issue and I like to be able to respond. I like to be able to pause what I’m doing if necessary. Maybe this is to avoid risk, by not feeling like I have all my eggs in one basket. But maybe it increases the risk, because I&#8217;m less inclined to take on long-term full-time contracts.</p>



<p>Before I had the business, things were different. I craved stability, and I’m sure my career suffered for it.</p>



<p>I finished my university time in Melbourne at the very end of 1997. I’d had jobs as a research assistant in each of the three faculties I got degrees from, and it all wound up on New Year’s Eve at the end of 1997. I handed in my last pieces of work and after the long weekend I started working as a consultant, in a job that I had been offered six months earlier. I turned down the offer of a PhD for the stability of a wage.</p>



<p>In 2000, we moved to the UK with our two sons, and that felt risky. When we arrived I did not have a job to step into, but within a week I was deciding which of two I would take. Both were permanent positions &#8211; I was still risk-averse. I didn’t want to go contracting. I didn’t back myself enough. Financially, I could’ve made better choices, but I had a young family, and money has never been a goal. In 2002 we moved to Adelaide (where my wife grew up), and I still wanted permanent roles.</p>



<p>It took more than ten years of working in permanent positions (&#8217;98 to &#8217;08) for me to take the career risk of starting my own company.</p>



<p>Someone called me an entrepreneur recently. I disagreed with them. I’ve never sought funding from anywhere. I&#8217;ve never tried to build up a company to sell it. I’ve always pushed against hiring a salesperson and never had anyone in the company with a sales-related title.</p>



<p>What I have done is lean into the community. I’ve done work for charities for little or no revenue &#8211; I even remember charging a client less than the hourly rate I was paying a subcontractor to do the work. And I’ve volunteered my time (and that of my employees) to work among the data community, running events, speaking at conferences, helping community members with what they need, even sometimes people who would consider us competition. And I’ve tried to listen to what God is saying. That’s been hard a lot of the time, but I try.</p>



<p>Is that a career risk? Sure &#8211; community work is definitely a risk. It would be better for me to focus on the bottom line and limit how much we do that isn’t tied directly to revenue. Community work is not how people are supposed to run a business. I’m in a group for business leaders and I know that I’m not the same as most of the others there.</p>



<p>This stretches to other parts of my life as well. In the comedy community, I’m hoping to start another open mic room again (I ran one in May/June last year before the venue closed). And I’m not running it to make money &#8211; I’m doing it to provide more options for local comedians. People need stage time to improve, and I can help with that. That might help me improve as a comedian too, but that’s not it. There is a need for more open mic space in Adelaide, and I think I can help. Is that a risk? Nah &#8211; it&#8217;s not taking anything away from my livelihood. But people have called me &#8220;commercially naïve&#8221; because of it.</p>



<p>Like I wrote further up &#8211; I’m not an entrepreneur. I’m good at helping other people solve their stuff, which makes me a good consultant. But running my own company still feels like a career risk to me. At the end of the day though, I like that my company reflects who I am, and I think the bigger risk would be for me to be someone I’m not.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/03/10/career-risks/">Career risks?</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/03/10/career-risks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ageing code</title>
		<link>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/</link>
					<comments>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 10 Feb 2026 00:58:53 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6344</guid>

					<description><![CDATA[<p>I’m pretty sure both spellings are fine, so don’t come at me for putting an ‘e’ in ‘ageing’. The interwebs tell me the version with the ‘e’ is preferred in England and Australia, so that’s what I’m going with. Now, as much as I’d like to wax lyrical about how English ages and changes over [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/02/10/ageing-code/">Ageing code</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I’m pretty sure both spellings are fine, so don’t come at me for putting an ‘e’ in ‘ageing’. The interwebs tell me the version with the ‘e’ is preferred in England and Australia, so that’s what I’m going with.</p>



<p>Now, as much as I’d like to wax lyrical about how English ages and changes over time, and how people nowadays would’ve said “don’t @ me”, I’m going to fit into <a href="https://sqlasylum.wordpress.com/2026/02/03/t-sql-tuesday-195-how-has-your-code-aged/" target="_blank" rel="noreferrer noopener">Pat’s brief</a> slightly better and talk about code ageing &#8211; T-SQL code even!</p>



<p>I could write about how new features in T-SQL can help, such as the NULL-aware &#8220;IS [NOT] DISTINCT FROM&#8221;. If you have code that uses the non-sargable ISNULL function on a column, then that might be something to consider when you next review that code. But I&#8217;m going to talk about T-SQL that can age badly because of more sneaky reasons.</p>



<p>There’s a truth that I think many coders don’t really appreciate, and that’s that <strong><em>a T-SQL query is rarely good by itself</em></strong>. Sure, there are queries that have strong potential to be good, but performance depends on a few other things too. And this can mean that a query that was good when it was written might have become bad over time, even though it’s the same query it always was.</p>



<p><strong>Bad plans in the cache</strong></p>



<p>One obvious example is when a bad plan has crept into the cache, and now every time that query runs, the bad plan gets chosen, and performance is now rubbish.</p>



<p>Plans show us how the Query Optimizer has decided to run a query. And I&#8217;m saying &#8216;decided&#8217; to personify it a little. Of course it&#8217;s just maths, following a precise algorithm with heuristics to try to make the best choices, but at the of the day, as much as we know that there&#8217;s no arbitrary decision-making going on, it can really feel like there&#8217;s some tiny person in there, choosing to punish us for every mistake.</p>



<p>One mistake that gives us a bad plan can be simply calling the query with a parameter that is rarely used but causes the query to run a very different way. That plan could get cached, and suddenly every subsequent call for that query (with more typical parameters) uses a less-than-ideal plan.</p>



<p>Imagine the query:</p>



<pre class="wp-block-code"><code>SELECT TOP (100) t.Col1
FROM SomeTable t
WHERE t.Col2 IS NOT DISTINCT FROM @p1
ORDER BY t.Col3 DESC;</code></pre>



<p>There are two obvious ways that this query could run. One would be to apply a TopN Sort on the results of a Seek on Col2, the other would be to perform an ordered (backward) Scan of an index on Col3 with a residual Predicate on Col2. Which one is better? No idea. It depends on how selective the filter is. It also depends on whether particular indexes are available, although right now I&#8217;m going to assume there are covering indexes that could produce both plans, one on &#8220;(Col3) include (Col1, Col2)&#8221;, and one on &#8220;(Col2, Col3) include (Col1)&#8221;. And it depends on whether the SQL engine knows about the selectivity of different values (ie, the statistics). All this is where the strength of a query is not just about how the query is written, but about indexes, statistics, the cardinality estimate model, and more.</p>



<p>If the table has 100M rows and 10% of them have the value we&#8217;re looking for, then the perhaps the best option is the ordered Scan. On average we might need to look through 1000 rows to find the top 100, if those values are mostly around the largest values of Col3.</p>



<p>But what if only 0.001% of the rows have the value we&#8217;re looking for. A total of 1000 rows in the whole table. Now we&#8217;d be better off using a Seek to find the 1000 rows. But that Sort might need a large memory grant.</p>



<p>And what if there are 10M of them, but they&#8217;re all around the smallest values of Col3&#8230; oh, the joys of query tuning.</p>



<p>Maybe the value is usually selective, but every so often it&#8217;s not &#8211; maybe when it runs at 4am it uses a value which isn&#8217;t selective, so I&#8217;m willing to take the hit on performance, but during the day I want it to use the Seek + Sort plan. And usually this is fine, and there&#8217;s a cached plan that does the Seek + Sort that gets reused every time. Terrific.</p>



<p>Then one night, there&#8217;s an index rebuild, and the next time the query runs it&#8217;s the overnight non-selective parameter. The compiler comes up with a plan which is good for that value, and it&#8217;s the ordered Scan plan, which gets cached. Then when users arrive in the morning, that&#8217;s the plan that gets used every time, and it&#8217;s slow. Agonisingly, it gets often (but not always!) fixed by restarting the SQL service, and let&#8217;s stop imagining how much pain organisations can get into when they start down these rabbit holes.</p>



<p>Could we force the Seek? Sure. Should we force the Seek? That&#8217;s a tougher question. Maybe we need the overnight query to run better too. Maybe we need two queries. If the parameter value NULL is the only one which is non-selective, then making two queries is easy. We could test the value for NULL and then run a different query. That&#8217;d be easy to do. Or maybe it could be fixed by using the OPTION (RECOMPILE) hint, but that&#8217;s not exactly free either.</p>



<p>Inside knowledge is great, but perhaps we didn&#8217;t have that knowledge when we wrote the query, and the code has aged badly because we didn&#8217;t anticipate the future.</p>



<p>There are a bunch of other changes that can cause a perfectly adequate query to age poorly. Some quick examples:</p>



<p><strong>More data than expected</strong></p>



<p>It doesn&#8217;t have to be a &#8216;bad plan&#8217; scenario for a query to be less good than when it was written, because conditions can simply change. The system was so popular than the amount of data grew and now some process takes a lot longer than before. The scan was fine, but now the table is a lot larger, and the values that we thought would be selective aren&#8217;t (or vice versa).</p>



<p>Or maybe because the volume of data has increased, the number of physical reads is higher. Perhaps adding RAM is a simple solution, but maybe queries that were fast enough with full scans need to be rewritten.</p>



<p><strong>Better (!) estimates</strong></p>



<p>Maybe the version has been upgraded, and the cardinality estimates are improved. The Optimizer used to think that 20 rows would be the results of a filter, but it was always wildly wrong, with 20,000 rows being more typical. Now with a later version of SQL, the estimate is correct, but because of this, there&#8217;s a join that&#8217;s using a Hash Match instead of a Nested Loop. Way fewer logical reads, but now it needs a larger memory grant to run the query, and system performance is hurting.</p>



<p><strong>Concurrency</strong></p>



<p>Speaking of memory, maybe the concurrency requirements have increased. Maybe there are 100x as many as expected users trying to use the system at once, and those memory grants are causing a bottleneck. Maybe queries need to be tuned to discourage large memory grants.</p>



<p><strong>Index changes</strong></p>



<p>Maybe partitions have been introduced, and the indexes haven&#8217;t been reviewed.</p>



<p>Or maybe a well-meaning DBA or external consultant (ahem!) has been brought in and a new index has been added to reduce the reads. Except that now some other query has started to use that index and although the Query Optimizer has good reason for choosing that index, it&#8217;s slower than it was before, or that query we&#8217;d tuned to reduce the memory has returned to its old patterns.</p>



<p><strong>So… what should we do?</strong></p>



<p>Naturally what we need is a crystal ball, and write our queries (and our indexes, partitions, statistics, hints, whatever) according to how we expect when things have changed. Typically if you write with scale in mind, you won&#8217;t be impacted too much by scale.</p>



<p>But also, understand that there will be some things that you can&#8217;t expect so easily. You can&#8217;t necessarily expect to anticipate that a particular index will be created, and I&#8217;m definitely not suggesting you force the use of a particular index from day 1 of your query, because the change might be about the shape of the data &#8211; something that was marvellously selective no longer is for example.</p>



<p>The general feel of T-SQL code might not age as obviously as, say, .Net application code, with techniques that have been superseded over the years. Or a UI that that has aged like a trendy haircut. A lot has changed in the database world, but a T-SQL query now looks roughly the same as it did in the days of SQL Server 2005. But you should totally expect that a query you wrote in a small dev environment might behave quite different in production as the size and shape of the data increases.</p>



<p>So don&#8217;t beat yourself up about it &#8211; just schedule a code review, or at least a good tuning session. There&#8217;s bound to be some things you can fix up, and maybe those fixes won&#8217;t age nearly so badly, because you have a better idea about how things will look in the future.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/02/10/ageing-code/">Ageing code</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Mistakes? Really, Louis? ;)</title>
		<link>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/</link>
					<comments>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 00:14:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6336</guid>

					<description><![CDATA[<p>Louis Davidson is hosting this month&#8217;s T-SQL Tuesday, and asks us to relive mistakes. Ouch! It&#8217;s fine &#8211; I already had a psychologist appointment scheduled for later in the week. The name of this post &#8220;Really, Louis?&#8221; is nothing to do with how Louis thought for a number of years that Arnie Rowland was me. [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/">Mistakes? Really, Louis? ;)</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://drsql.link" target="_blank" rel="noreferrer noopener">Louis Davidson</a> is hosting this month&#8217;s T-SQL Tuesday, and <a href="https://drsql.link/2026/01/13/t-sql-tuesday-194-invitation-learning-from-mistakes/" target="_blank" rel="noreferrer noopener">asks us to relive mistakes</a>. Ouch! It&#8217;s fine &#8211; I already had a psychologist appointment scheduled for later in the week.</p>



<p>The name of this post &#8220;Really, Louis?&#8221; is nothing to do with how Louis thought for a number of years <a href="https://www.red-gate.com/simple-talk/blogs/why-we-write-3-an-interview-with-rob-farley/" target="_blank" rel="noreferrer noopener">that Arnie Rowland was me</a>. But rather about how people (especially &#8220;conscientious types&#8221; <em>(that&#8217;s only &#8216;code&#8217; if you want it to be)</em> like so many of us in the data world) frequently take ourselves back through our mistakes, beating ourselves up about it, thinking about how we could&#8217;ve avoided it, what we could&#8217;ve done better (before, during and after), as if time machines could exist.</p>



<p>I mean, sure, there&#8217;s a school of thought that because we learn through our mistakes, we become stronger. But you know, I&#8217;d rather learn through near misses. &#8220;Oh, that could&#8217;ve been bad, let me code up something so that doesn&#8217;t happen&#8221; is a better experience than having to learn when a disaster has actually happened. And hands up if you know that having a good &#8216;disaster recovery&#8217; plan only saves you from certain problems, not all problems&#8230; thank you, I see that hand. And that one. Yup. All the hands.</p>



<p>There&#8217;s an article on Psychology Today called <a href="https://www.psychologytoday.com/us/blog/more-than-a-feeling/202412/coming-out-of-the-shadows-of-our-worst-mistakes" target="_blank" rel="noreferrer noopener">&#8220;Coming Out of the Shadows of Our Worst Mistakes</a>&#8220;, by Rodney Luster, PhD <em>(he has a blog called &#8220;More Than A Feeling&#8221; which has a lot of great posts and is worth looking at if you have mental health struggles)</em>. One of his points is that even a single mistake can heighten anxiety and depression symptoms. And still, we all make mistakes. All of us. Data professionals included.</p>



<p>Our mistakes shouldn&#8217;t define us. We can quote Sting when he sings that &#8220;history will teach us nothing&#8221;, but we hope that each mistake makes us likely to fall into the same patterns that led us into trouble before. I heard something recently that says our histories might describe us, but they don&#8217;t define us. And I want to assure you, reader (and myself), that your history is more about successes than your failures. You wouldn&#8217;t be where you are today if you weren&#8217;t good at what you&#8217;d do. <em>(You would&#8217;ve been promoted into management instead.)</em></p>



<p>As Dr Luster writes, our mistakes can cast shadows over us. Over our mental wellbeing. Over our general mood. We can feel guilt and shame about mistakes, and it can take proper effort to feel redeemed. As a Christian, I know that this is a major aspect of Christianity. The Bible says that we&#8217;ve been set free from our guilt and shame, and God loves (and likes) us despite our failings. And yet, we relive our mistakes. Especially the ones involving those areas in which we know we&#8217;re meant to do better. Where we&#8217;re supposedly &#8216;experts&#8217;.</p>



<p>I&#8217;m not going to dwell on my mistakes today. Well, I&#8217;m not going to dwell on my mistakes any more today. I&#8217;ve already spent time doing that, even though I knew it wasn&#8217;t a good idea. I thought at some point in my life I would work out how to stop reliving mistakes, but that&#8217;s not a skill I&#8217;ve learned yet.</p>



<p>I say to my clients, &#8220;Don&#8217;t worry &#8211; we&#8217;ve all done it&#8221;, and &#8220;You&#8217;re not a proper data professional until you&#8217;ve stuffed something up&#8221;. For some reason, I still remember a question in the Microsoft Certified Master that dealt with corruption, and (without going into any detail, because NDA, and because I really don&#8217;t remember the detail) failing to grab a copy of the database files first. That&#8217;s not a mistake I&#8217;d ever made with a corrupt database in the real world (and there had been plenty I&#8217;d handled &#8211; I think I had a reputation for fixing corruption, back when it was more common than nowadays), but in the exam &#8211; yeah, made the mistake. Maybe it was because it was an exam. Maybe it was because I was sitting by myself (not alongside a customer). That day in the exam, I found myself wanting those files (because of another mistake!), and didn&#8217;t have them.</p>



<p>The consequence of my mistake in that exam was basically nothing. I passed the exam and earned my MCM status. Apparently I scraped through with the lowest passing score I could get. But I still passed. That corrupt database question didn&#8217;t matter at all. And yet, every so often, it appears in my thoughts. I wonder whether I would make that mistake again, perhaps in an environment where it would matter more. So you can imagine how much I relive the mistakes that actually count for something&#8230;  </p>



<p>The mistake I&#8217;m going to relive for you/Louis is the mistake of reliving my mistakes, as I&#8217;ve been describing. I know it sounds meta &#8211; but I learned recently that &#8216;meta&#8217; is the Portuguese word for &#8216;goal&#8217; (not the football goal, but the thing you&#8217;re trying to achieve), so maybe it&#8217;s okay that it&#8217;s meta. It&#8217;s a useful goal to stop reliving your mistakes, even if it is meta.</p>



<p>My advice to you is to learn forgiveness. Forgive everyone else their mistakes. It&#8217;s easy to forgive people their mistakes because, by definition, they&#8217;re unintentional. So do that, and get used to doing that. Then work out how to forgive yourself for your own.</p>



<p>&#8230;and teach me how to do it&#8230; 😉</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/">Mistakes? Really, Louis? ;)</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Notes to self&#8230;</title>
		<link>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/</link>
					<comments>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 01:14:38 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6326</guid>

					<description><![CDATA[<p>Mike Walsh from StraightPath wants us to write two short notes to former selves. One writing now to ten years ago (2025 me to 2015 me), and one writing what we imagine a future self would write to us now (2035 me to 2025 me). In 2019 there was a &#8220;letter to 20-year-old me&#8221; post, [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/">Notes to self&#8230;</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Mike Walsh from <a href="https://straightpathsql.com" target="_blank" rel="noreferrer noopener">StraightPath</a> wants us to <a href="https://straightpathsql.com/archives/2025/12/t-sql-tuesday-193-a-note-to-your-past-and-a-warning-from-your-future/" target="_blank" rel="noreferrer noopener">write two short notes to former selves</a>. One writing now to ten years ago (2025 me to 2015 me), and one writing what we imagine a future self would write to us now (2035 me to 2025 me). In 2019 there was a &#8220;<a href="https://lobsterpot.com.au/blog/2019/06/11/a-letter-to-a-former-me/">letter to 20-year-old me</a>&#8221; post, but that was different. Twenty-year-old me didn&#8217;t know about the significance of data or of the technical community, hadn&#8217;t started a career yet, was still at university&#8230; whereas today&#8217;s post is writing to someone who&#8217;s a lot like current me, just without the last ten years. And imagining what a version of me in ten years&#8217; time would say. Hmm.</p>



<p>I&#8217;m in a business leaders group called <a href="https://www.vistage.com/" target="_blank" rel="noreferrer noopener">Vistage</a>. In Australia it used be to called TEC (I&#8217;m quite happy about the rebranding because &#8220;TEC&#8221; sounds like &#8220;tech&#8221;. Plus each group has a chair, and &#8220;TEC Chair&#8221; sounds a lot like &#8220;deckchair&#8221; to me). Anyway, when there&#8217;s a discussion going on, my Vistage chair sometimes says, &#8220;If you knew the answer, what would it be?&#8221;, which comes from Sir John Whitmore&#8217;s book &#8220;Coaching for Performance&#8221;.</p>



<p>It&#8217;s an annoyingly good question because it shifts the perspective a little. It&#8217;s not just asking what the answer is (to which &#8220;that&#8217;s the problem &#8211; I don&#8217;t know!&#8221; is a common response), it&#8217;s asking the person to imagine a situation where they already know. It subtly creates courage in the responder, because they&#8217;re asked to imagine that they know and that what they know is correct. I say it&#8217;s &#8220;annoyingly good&#8221; because it&#8217;s essentially using mind games to get us to move us past not knowing.</p>



<p>Mike&#8217;s asking us to write a note to ourselves from ten years in the future is framed similarly. He wants us to imagine a world in which we&#8217;ve got through the next ten years, and we now have the benefit of hindsight. He wants us to look back at 2015 with hindsight, to point out that a thing we were going through at the time would work out okay (or maybe the opposite), and then give ourselves similar advice about the thing we&#8217;re in now. Essentially, he&#8217;s asking, &#8220;If you knew you were going to be successful, what would you do/feel differently?&#8221; He wants us to prod ourselves into action about something in the world.</p>



<p>For me, I&#8217;ve just turned 51. I remember turning 31 and finding it&#8217;s still one of the more jarring age-changes I&#8217;ve had. Something about changing from &#8220;thirty&#8221; to &#8220;thirty-something&#8221; felt like I had entered a different phase of life, and I&#8217;m trying not to feel similar this year now that I&#8217;m &#8220;fifty-something&#8221;. Looking back at being 41, and imagining what it might be like to be 61, it&#8217;s interesting.</p>



<p>Ten years ago the world felt like it was changing quickly. And now it feels like it&#8217;s changing even quicker. In another ten years, I suspect the rate of change will not have slowed at all, although there is a significant chance that a breaking point might have been reached along the way. Ten years ago we had no idea of the events that were coming. Australia had seen five changes of Prime Minister in the previous ten years, but despite only having two more changes since then, the impact of fires, lockdowns, and other global events have made the world seem vastly different.</p>



<p>My advice to 2015 me is to ride with the big waves and to not sweat the small ones. I don&#8217;t think I did let the small waves knock me around, but I know there were times that were harder than I&#8217;d like. I&#8217;m still here though! Data is still data, whether the tools change, or the trend is towards or away from relational, or whether we&#8217;re working on-site or remote. Basic needs of society are still the same, and businesses still need their data to be good, insightful, and well-looked after. New ways of doing things might change the day-to-day activity, and people might be dealing with jarring stresses from the world more than ever, but the core needs of society and data-focused businesses are mostly unchanged. </p>



<p>I suspect I&#8217;ll feel similar in 2035 looking back at now. I have no idea what will happen in those ten years. AI is bringing change, bringing new tools (<a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/" target="_blank" rel="noreferrer noopener">as I wrote in August</a>), but I don&#8217;t think it will change what people or businesses need &#8211; just how we deliver them. People still need people to be there for them, and businesses still need to trust their data and have insight into it. This year I passed 20 years of running the user group in Adelaide, and in another 10 years I might have just gone past 30 &#8211; which will be just about half my life by then. The pandemic caused a lot of change to community, and even within the local user group things feel different now to then. But people do still need community, and I will try to help make that happen, whether that&#8217;s in the technical community, the comedy community, or the church community.</p>



<p>So the advice I&#8217;m going to give myself from the future is to make the right decisions. Keep doing the things that I should be doing, and find the right balance between pushing myself and going easy on myself. Tonight is a case in point &#8211; my back is sore, but it often is so I shouldn&#8217;t let that stop me going out to Monday night open-mic comedy. I haven&#8217;t been in a long while, but I need to get that back into my weekly schedule.</p>



<p>If current me knows things are going to work out, what will I have been doing to help that? Yeah &#8211; doing those things that I know are what I should be doing. I&#8217;m pretty sure hindsight will thank me for making those good decisions.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/">Notes to self&#8230;</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server 2025 excitement &#8211; fuzzy is coming!</title>
		<link>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/</link>
					<comments>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 11 Nov 2025 06:35:12 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6319</guid>

					<description><![CDATA[<p>The smart money is on SQL Server 2025 being released to General Availability this month. Next week there are two major conferences in the Microsoft data space, Microsoft Ignite and the PASS Summit. Almost all the recent versions have been released one of these events and so with their happening in the same week, it’s [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/">SQL Server 2025 excitement &#8211; fuzzy is coming!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>The smart money is on SQL Server 2025 being released to General Availability this month. Next week there are two major conferences in the Microsoft data space, Microsoft Ignite and the PASS Summit. Almost all the recent versions have been released one of these events and so with their happening in the same week, it’s highly likely to the week for announcements.</p>



<p>Therefore Steve Jones asks us to write about <a href="https://voiceofthedba.com/2025/11/07/t-sql-tuesday-192-invitation-sql-server-2025-excitement/" target="_blank" rel="noreferrer noopener">what is making us excited about this new release</a>. Perhaps ‘excitement’ is the wrong word, but certainly Steve wants to know which features will make our lives easier. He lists a few ideas but for me the biggest thing is the probably the new suite of functions about fuzzy string comparison.</p>



<p>One of the things that I feel has been significant in the last 20 years has been tidying data. In some ways, I feel like Data Quality is less of a thing nowadays, especially with the advent of Big Data &#8211; one of the fundamental things about structured data is that the quality can be poor sometimes. AI prompts seem to make us bad at typing because it’s just so forgiving. But if you’re trying to know whether someone’s name is Steven or Stephen, then even though AI might not care, Steve probably does. And even though two names might sound the same, there is no bounds to the &#8216;creativity&#8217; of parents to name their daughters Khloe, which probably gets written down by call centre employees as Chloe or Clooey or something else entirely. Cafes even get confused with my name, let alone anyone with a name outside the top ten from the last hundred years (fun fact: apparently &#8220;Robert&#8221; was the number one name in the US from 1924-1939, and then top 10 until 1972. I was born two years later, so clearly my parents weren&#8217;t following trends &#8211; but I was named after a Scottish King, and was probably lucky that there was already a Bruce in my mum&#8217;s family). So even though data is becoming more and more UNstructured, we need to care more and more that our Big data is also Good data. High quality. Spelling things the right way.</p>



<p>I&#8217;m very sad that Master Data Services is leaving the product with SQL Server 2025. Master Data is a great way of handling lists of things, such as known verified data from trusted sources. But even though there are alternatives (such as keeping an instance of SQL Server 2022 around, or just using an external product like Profisee, which has some great tools for identifying data matches), I&#8217;m not thrilled about that aspect of SQL Server 2025.</p>



<p>However, SQL Server 2025 does bring some great options for doing fuzzy string matches, making custom Data Quality options even richer. I&#8217;ve spoken about this at some user groups recently (including tomorrow, remotely for <a href="https://www.meetup.com/tripass/events/311828929" target="_blank" rel="noreferrer noopener">TriPASS</a>, and in a few weeks in Melbourne and Sydney for <a href="https://analyticsconf.com/" target="_blank" rel="noreferrer noopener">Difinity</a>), and in that session I go much deeper into how I see data matching going. I&#8217;ll also write more about these methods in future posts, but it&#8217;ll take a few posts, covering quite a few sub-topics.</p>



<p>In the meantime though, have look at the Microsoft documentation on <a href="https://learn.microsoft.com/en-us/sql/relational-databases/fuzzy-string-match/overview" target="_blank" rel="noreferrer noopener">Fuzzy String Matching</a>. You&#8217;ll see there are four new functions, covering similarity and distance across two algorithms (Edit Distance and <a href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance" target="_blank" rel="noreferrer noopener">Jaro-Winkler</a>).</p>



<p>We&#8217;ve had Fuzzy Lookup and Fuzzy Grouping in SSIS and Power Query (well, Power Query Online) for over twenty years, but they&#8217;ve felt like closed boxes. Sure you can put all your data through a Fuzzy Grouping transform, but there weren&#8217;t many options for being able to fine-tune things. Now I can find a bunch of candidates for a match, and then apply my own set of logic using these new functions.</p>



<p>Keep your eye out for lengthier, more technical posts in a month or so (after the conferences are done), and for now, take the time to explore where these new functions can fit into your current data matching code. You might not be rolling out SQL Server 2025 for a few months, but you can start using this in Azure SQL already!</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/">SQL Server 2025 excitement &#8211; fuzzy is coming!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>String parsing</title>
		<link>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/</link>
					<comments>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 21 Oct 2025 01:05:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6304</guid>

					<description><![CDATA[<p>Steve Jones asks how we parse strings. As Steve writes, there are a bunch of ways to parse strings in SQL. And (which Steve doesn&#8217;t write) 2025 is going to change a lot of people&#8217;s approaches, with its native regular expression functions. I&#8217;ve looked at these, but so far my reaction is more like &#8220;Oh [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/10/21/string-parsing/">String parsing</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://voiceofthedba.com" target="_blank" rel="noreferrer noopener">Steve Jones</a> asks <a href="https://voiceofthedba.com/2025/10/12/t-sql-tuesday-191-invitation-your-favorite-string-parsing/" target="_blank" rel="noreferrer noopener">how we parse strings</a>.</p>



<p>As Steve writes, there are a bunch of ways to parse strings in SQL. And (which Steve doesn&#8217;t write) 2025 is going to change a lot of people&#8217;s approaches, with its <a href="https://learn.microsoft.com/en-us/sql/relational-databases/regular-expressions/overview?view=sql-server-ver17" target="_blank" rel="noreferrer noopener">native regular expression functions</a>. I&#8217;ve looked at these, but so far my reaction is more like &#8220;Oh finally!&#8221;, rather than &#8220;Ooh, think of the potential!&#8221; &#8211; I think these new functions are most useful for when you&#8217;ve got a regular expression that you&#8217;re using in non-SQL code, and now it&#8217;s much easier to handle it within SQL.</p>



<p><em>I should also point out that the days of new features appearing only-when-a-new-SQL-Server-version-appears feel like they&#8217;re well-and-truly over, since Azure SQL gets stuff first. So when I write &#8220;2025&#8221;, I really mean the year, rather than the version of SQL Server. The feature-set, rather than the product.</em></p>



<p>But let&#8217;s talk about non-regex methods for parsing strings and the patterns that I use. I find that the biggest issue with most string parsing is <strong>complexity</strong>. Even something as simple as finding the value between the 2nd and 3rd hyphens can be done in different ways with different levels of complexity, and even if it works, maintaining that code can become really hard.</p>



<p>For example, finding the position of the first hyphen might be as simple as using the CHARINDEX function. Finding the second might involve two CHARINDEX functions, and calling SUBSTRING with parameters that have increasingly nested CHARINDEX calls&#8230; well, you can see how the complexity quickly builds</p>



<p>Another way to find that &#8216;between two hyphens&#8217; thing would be to do a STRING_SPLIT call with the enable_ordinal parameter set, and then filter it to the third entry. All well and good, but depending on what else is needed, STRING_SPLIT&#8217;s creation of additional rows can make life harder, and if you&#8217;re fighting complexity, expanding the number of rows in a dataset and then combining them again can be hard.</p>



<p>As much as we data people like &#8216;set-based&#8217; solutions, rather than thinking how to transform individual values, string parsing seems to fall into the bracket of okay to deal with this way.</p>



<p>So if we start with a string value in a variable, there are a lot of things that can be done without freaking out the person who will need to read your code later (or &#8220;future you&#8221; even). It probably doesn&#8217;t matter too much if you split the string up in various ways, concatenate parts back together in different orders, STRING_AGG some stuff, and so on. It&#8217;s certainly much easier than trying to parse all the values in a table at once in these more complex ways. </p>



<p>I like to separate logic for this kind of thing away into a function, where the logic can be tested and proven and anyone using it can have confidence that it works. And if there&#8217;s a bug or an enhancement, it can be fixed in one place.</p>



<p>But not a scalar function, of course. A table-valued function. One that can take a string as a parameter and produce a row with all the different things that could be wanted. And I can guarantee that it will produce a single row.</p>



<p>Now, this table-valued function should be inline, rather than multi-statement. I hope you&#8217;re asking why. It&#8217;s because I want the Query Optimizer to simplify it all out. I can call the function with APPLY in my FROM clause and then refer to whichever columns I like, and expect the QO not to bother with working out the ones I don&#8217;t want. So if I have a function that carves up an address string into various components, does some lookups to get reference values, maybe coming up with a JSON version and an XML version, and so on&#8230; if I don&#8217;t reference the JSON column in my outer query, my function won&#8217;t bother to produce it. A multi-statement will do all the work every time because it&#8217;s procedural. Inline will leverage the Query Optimizer to figure out which things it doesn&#8217;t need.</p>



<p>APPLY won&#8217;t just get used to call the function, but I&#8217;ll use it extensively inside the function too. By using APPLY, I can do a bunch of working calculations, making the building blocks of my work, and then combine them in the different ways, while keeping the whole thing as a single query for my inline function. Remember that an inline TVF is a stored correlated subquery. With APPLY, I can layer my logic, making it easier to maintain. If I need to expand to multiple rows, I can fold it back into one in a single APPLY subquery, unpivotting or string_split and then pivotting back into a single row. If I need a new set of return columns added, some more APPLY clauses can keep that new logic separate, so that I can confidently know that I still have only one row of data coming out, and this new logic isn&#8217;t going to confuse any of my existing code.</p>



<p class="has-text-align-left">Here&#8217;s an example, using one of the ideas that Steve mentioned &#8211; pulling dates out of a string, where there are separators that are either a semicolon or full-stop. Notice that my TVF is a series of APPLY statements. Notice also that I&#8217;m using OUTER APPLY and TRY_CONVERT so that if I get NULLs, I&#8217;m still returning the row. And all the way along, I have my working calculation columns available in case I need them again.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="658" src="https://lobsterpot.com.au/wp-content/uploads/image-22-1024x658.png" alt="" class="wp-image-6307" srcset="https://lobsterpot.com.au/wp-content/uploads/image-22-1024x658.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-22-300x193.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-22-768x494.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-22-1536x987.png 1536w, https://lobsterpot.com.au/wp-content/uploads/image-22-2048x1316.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>If I needed to make sure I only returned a single row per starter row, I could do that by just combining more into a single APPLY and then aggregating the results. I&#8217;ve also added a column to return the string length, which I&#8217;ll use in a moment.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="990" src="https://lobsterpot.com.au/wp-content/uploads/image-25-1024x990.png" alt="" class="wp-image-6310" srcset="https://lobsterpot.com.au/wp-content/uploads/image-25-1024x990.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-25-300x290.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-25-768x742.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-25.png 1504w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>As for what happens when I ignore one of the values&#8230; well like I said earlier, the work gets cut back. Compare what happens if I&#8217;m not interested in the JSON block, only the string length.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="399" src="https://lobsterpot.com.au/wp-content/uploads/image-24-1024x399.png" alt="" class="wp-image-6309" srcset="https://lobsterpot.com.au/wp-content/uploads/image-24-1024x399.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-24-300x117.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-24-768x299.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-24-1536x598.png 1536w, https://lobsterpot.com.au/wp-content/uploads/image-24-2048x797.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Naturally, this can work against a table of values just fine &#8211; I&#8217;m sure I don&#8217;t need to show you what&#8217;s going on there.</p>



<p>Don&#8217;t misunderstand me &#8211; I love the new regex stuff that&#8217;s come in this year. But my general pattern for string parsing is unlikely to change &#8211; the regex will just be another tool in my arsenal. I&#8217;ll still create useful inline TVFs that suit my customers&#8217; individuals need, letting them pick and choose the columns they want.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/10/21/string-parsing/">String parsing</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Learning new skills</title>
		<link>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/</link>
					<comments>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 09 Sep 2025 02:59:25 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6300</guid>

					<description><![CDATA[<p>Todd Kleinhans asks us to write about “Mastering A New or Existing Technical Skill”. Todd is one of my favourite people in the data community simply because he sends people hand-written notes. It’s such a nice thing that he does, and it makes people feel better than a simple thank you &#8211; like this message [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/">Learning new skills</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Todd Kleinhans asks us to write about “<a href="https://toddkleinhans.wordpress.com/2025/09/02/t-sql-tuesday-190-mastering-a-new-or-existing-technical-skill/" target="_blank" rel="noreferrer noopener">Mastering A New or Existing Technical Skill</a>”. Todd is one of my favourite people in the data community simply because he sends people hand-written notes. It’s such a nice thing that he does, and it makes people feel better than a simple thank you &#8211; like this message he sent to Kevin Kline back in 2018.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="oceanwp-oembed-wrap clr"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr"><a href="https://twitter.com/hashtag/SQLSatCos?src=hash&amp;ref_src=twsrc%5Etfw">#SQLSatCos</a> <a href="https://twitter.com/kekline?ref_src=twsrc%5Etfw">@kekline</a> <a href="https://t.co/vitsOuMK95">pic.twitter.com/vitsOuMK95</a></p>&mdash; SQL by Day, VR by Night (@toddkleinhans) <a href="https://twitter.com/toddkleinhans/status/977337756773789696?ref_src=twsrc%5Etfw">March 24, 2018</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<p>On Thursday, I was sat in a “Cloud &amp; AI Innovation Summit” put on by the Adelaide Microsoft sub. I could’ve been visiting a customer and working on their data quality, or helping to sort out the details of an application, or writing documentation. But instead I was in sessions listening to what’s being said about tech, letting my head wander around the space, having conversations with Adelaide leaders.</p>



<p>I mention this because on that day I was reflecting on the fact that I learn differently to many others. In a session, I’ll probably be tapping on my phone, taking notes about things, jotting down ideas, looking things up, and generally letting my head roam around the concepts. People with pens often draw shapes or doodle. Questions appear in my head, which I either want to ask or research myself &#8211; if I don’t I end up feeling distracted by them. I’ve known for a long time that classroom environments and conference sessions are not really my preferred learning style, but if they can be conducive to letting my mind want through idea, then that&#8217;s good.</p>



<p>But Todd asked about learning (well, mastering!) new skills, rather than getting familiar with concepts. I’m talking about the latter because I feel it forms a foundation for skills to be built on. The concepts are the bedrock for the skills to attach to. I want to know the physics about why a ball will spin a certain way before I even put my shorts on. (Bad example &#8211; those days are long gone.)</p>



<p>I know that a lot of people want to experience the physical aspects of the world before they learn why things behaved that way, and that it’s very important to learn muscle memory to have a skill, but there’s a lot to be same for explaining concepts and inner workings, so that the why can be grasped. For me, at least, it’s that becomes a bit of a prerequisite for most new skills.</p>



<p>If I&#8217;m going to become truly proficient with a skill, it has to include knowing how the thing works. As a kid I had muscle memory that let me move around a piano keyboard, and I&#8217;d done some amount of theory as well, but it was only later that chord progressions gave me more freedom. When I picked up guitar-shaped instruments, the knowledge I had let me get comfortable much quicker.</p>



<p>I&#8217;m curious to see what other people say about how they master skills. There are a lot of people who like learning new skills in the data community.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/">Learning new skills</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI&#8217;s impact on careers</title>
		<link>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/</link>
					<comments>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 12 Aug 2025 00:17:01 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6275</guid>

					<description><![CDATA[<p>Taiob Ali is asking how AI is changing our careers. It&#8217;s a good question &#8211; one question worth reflecting on, even if the general perception among many people I talk to is &#8216;not much yet&#8217;. There are definitely plenty of people who use AI to help with emails, or as a replacement search engine, and [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/">AI&#8217;s impact on careers</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://sqlworldwide.com/t-sql-tuesday-189-how-is-ai-changing-your-career/" target="_blank" rel="noreferrer noopener">Taiob Ali</a> is asking how <a href="https://sqlworldwide.com/t-sql-tuesday-189-how-is-ai-changing-your-career/" target="_blank" rel="noreferrer noopener">AI is changing our careers</a>. It&#8217;s a good question &#8211; one question worth reflecting on, even if the general perception among many people I talk to is &#8216;not much yet&#8217;.</p>



<p>There are definitely plenty of people who use AI to help with emails, or as a replacement search engine, and anyone who&#8217;s writing code in a tool like VS Code will be getting code suggestions like never before, even if they&#8217;re not writing prompts for Copilot to write the code for them. But most of these people wouldn&#8217;t really say their careers have been changed &#8211; just that they&#8217;re becoming better at their job because of the tools that are now available.</p>



<p>I could ask an AI tool to write this post for me &#8211; but in some ways I feel like that&#8217;s avoiding the writing task, rather than just getting help with it.</p>



<p>But I think this has always been how it is with technology. There&#8217;s a process that is done by a person, and over time, the person gets better tools to help improve quality or speed or scale. Pretty soon, the job can be done by someone who doesn&#8217;t have the same skills as the original person, and later it can be done without a person being involved at all. My car&#8217;s ignition mechanism is a button I press. The car I had beforehand had a key that needed to be turned. Some electric cars just &#8220;turn on&#8221; when your phone is in the car. It&#8217;s all very different to my uncle&#8217;s 1902 Peugeot. It used to be a process that a person needed to be very much involved in, but now you barely even need to know that a car needs to be turned on.</p>



<p>When I learned to code, it was a Commodore 64. People told me I should learn to program using Assembly, but I saw benefit to the speed with which I could get programs created by leveraging the functionality provided within BASIC. I didn&#8217;t keep writing BASIC code, and different languages came with different frameworks to get different things done. The purists writing in low-level languages got left behind by the people leveraging other frameworks. Using those frameworks meant they could produce more functionality in less time.</p>



<p>As far as coding today, AI tools are like having another framework available. The packages available in most languages, including Python, PowerShell, JavaScript, .Net, and so many more, aren&#8217;t about to go away, but now AI provides the tools to use those packages more quickly. We&#8217;ve gone from grabbing a package and figuring out the nuances of how to use it to having AI recommend a package and write a bunch of code for us. The &#8216;no-code&#8217; options provided by UI Wizards are being replaced by systems where we can talk to AI and get a system that works the way we want. It&#8217;s not exactly &#8216;no-code&#8217;, but it&#8217;s pretty close to &#8216;code-you-never-need-to-see&#8217;. For me, I&#8217;m hoping it&#8217;ll be like &#8216;produce tests to demonstrate the correctness of this&#8217;, especially given AI&#8217;s tendency to hallucinate.</p>



<p>I was doing AI at university in the early 90s. My lecturers were trying to persuade me to accept an offer of a PhD at Edinburgh University, but I went into consulting instead. AI back then was very different, but I know we&#8217;ve seen AI change our jobs for many years &#8211; we just might not have been noticing. LLMs have brought AI into the forefront of our thinking, brought it to regular people, so now it&#8217;s more obvious that AI is having an impact.</p>



<p>For everyone in IT &#8211; heck, everyone in every industry! &#8211; staying current is essential. We all need to be developing our skills and using the latest tools, so that we don&#8217;t get overtaken and made redundant by new technology that&#8217;s coming up. Our jobs aren&#8217;t necessarily going to be replaced, but the tools we were using yesterday have been replaced, and AI is just another tool that we should be loading into our toolsets.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/">AI&#8217;s impact on careers</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The younger generation in the SQL community</title>
		<link>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/</link>
					<comments>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 08 Jul 2025 11:40:09 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6253</guid>

					<description><![CDATA[<p>John Sterrett asks us where the next generation is. Well, not quite. He asks us what we&#8217;re doing, or could be, to encourage younger people to get involved in the SQL community while increasing the number of younger speakers. I&#8217;ll come back to the &#8216;what I&#8217;m doing&#8217; question. First let&#8217;s talk about the age-demographic of [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/">The younger generation in the SQL community</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://procuresql.com/blog/author/johnsterrett/" target="_blank" rel="noreferrer noopener">John Sterrett</a> asks us <a href="https://procuresql.com/blog/2025/07/01/tsqltuesday-188-growing-the-younger-data-community-and-speakers/" target="_blank" rel="noreferrer noopener">where the next generation is</a>. Well, not quite. He asks us what we&#8217;re doing, or could be, to encourage younger people to get involved in the SQL community while increasing the number of younger speakers.</p>



<p>I&#8217;ll come back to the &#8216;what I&#8217;m doing&#8217; question. First let&#8217;s talk about the age-demographic of people in the SQL community.</p>



<p>Yeah &#8211; there is definitely a lack of young people. But I think this has always been the case. Even when I got into SQL properly, this was after I&#8217;d spent about seven years as a consultant / programmer. Databases had always been part of what I did, but I didn&#8217;t consider myself a specialist until later. Even the first presentations I did in the technical community were about coding, not about SQL. </p>



<p>My story wasn&#8217;t unique, either. Other people I met in the SQL world had taken a while to realise the significance of data, even though their journeys were sometimes different. Some came to databases after spending time as a sysadmin, some came from business applications like Excel, and some had been programmers like I had. Few seemed to get into data right away, and at 30 I was still seen as fairly young for the data community. When I was first awarded MVP status (when I was 31) there were just four other SQL MVPs in Australia &#8211; all older than me.</p>



<p>These days, data is understood much earlier. Data science and analytics have become legitimate university courses in their own right! Back in my day, data was a single uni subject. SQL varieties don&#8217;t quite get the same appreciation as other platforms, but data itself is more popular than ever.</p>



<p>The community though&#8230; well, it&#8217;s like Fight Club. People don&#8217;t always talk about community like they could. They might attend meetings to learn, but the benefit of time spent with other professionals can take a while to click &#8211; especially in a post-pandemic world where people are used to doing their learning online.</p>



<p>Community seems to be lacking in a lot of parts of society &#8211; certainly here in Australia where there were significant periods of lockdown (much worse in Melbourne than Adelaide where I am). People still need people, but losing loved ones to contagious diseases has meant people just don&#8217;t choose to be around other people so much. Online groups are good, but people can watch in isolation.</p>



<p>Getting to the other side of the room &#8211; moving from being in an audience to presenting &#8211; that&#8217;s even harder for people today. If they&#8217;re not even in the room much, even having the conversation about presenting is tricky. What am I doing to change this? Well, I still mentor various people, and some of that is about presenting, but more of it is about getting established as experts &#8211; helping them learn what they want to learn, and encouraging them to take steps to go where they want to. </p>



<p>In my mentoring, I encourage people those who don&#8217;t know about data to learn about data. I encourage people who know about data to attend community events. And I encourage people who are attending to start thinking about what they can present about and then to take the step to do it. Because presenting on a topic is a great way to make sure you really know your stuff.</p>



<p>Presenting can be part of someone&#8217;s journey, but it can also take time to warm up to the idea. Whenever you step onto a stage you become very visible, and that can be daunting. But I also think that if someone is feeling comfortable in their own skin as an expert, knowing that they are legitimately good at what they do (often takes quite a bit of mentoring and encouragement), then they will often start to realise that they belong on the other side of the room.</p>



<p>I hope that my user group will be able to have a local first-time presenter later this year &#8211; and ideally, it&#8217;ll be someone under 30. I have some ideas about who that might be, but I know the timing has to be right for them, so I&#8217;m not setting it as an actual goal.</p>



<p>I&#8217;m definitely interested to see what other people are doing to encourage younger presenters &#8211; but I think when you look at the wider data community, not just SQL, things aren&#8217;t as grey as they might seem.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/">The younger generation in the SQL community</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
