@ipazin and @frepez I agree that the String concatenation of “01” for first of the month is probably the fastest solution.
The column expressions temporal functions are very useful and are certainly a good option for this problem. Useful suggestions as always Ivan! 
The issue on performance for the component though is not that the specific solutions (java snippet/String manipulation or even Column Expressions) in isolation are slow , but in turning the solutions into a re-usable generic component (so we don’t have to write the same piece of code on a “per column” basis), a couple of loops were introduced.
The loops in themselves are not a problem here but performance really drops with how they have to handle the “Column Appends” at the end of the loops, to bring the newly created columns back into the fold.
In addition, scaling this up to the original 6 million+ rows (assuming the “1/1000th” comment was accurate) , and the memory requirements will mean that @frepez’s factory setting of -Xmx2048 is really going to slug performance.
I set mine up to 10GB and watching it process 6m rows, it is regularly hitting the 8GB mark, so squeezing that into just 2GB is likely to mean a lot of swapping to disk assuming it doesn’t just run out of required memory.
@frepez ,I am going to look at rewriting the component “long-hand” 
i.e with no loops, and use a hybrid approach for the different temporal requirements (e.g. the “01” concatenation for first of month) and see what a difference it makes for the component option. I’ll make use of some of @ipazin’s suggestions too, and if I have time try it with String Manipulation (multi), java snippets and the Column Expressions nodes to get a test of which performs best, then go with that one.
Not sure when I will be able to do it though. Might be soon, might be a few days.
In the meantime, I’d strong recommend increasing the memory available to KNIME. Edit the KNIME.INI file (take a backup first!) and change the line
-Xmx2048
to something like
-Xmx10G (with 16GB machine, I’d suggest 10G for KNIME should leave memory for other things.)
Further Information on memory settings
If you have lots of other things running though, set the memory for KNIME lower, because if KNIME is told it can have 10G of memory, but when it goes to use it the 10G is not all available, KNIME will do a rapid exit (i.e. it will just vanish with anything unsaved lost). The setting does not “allocate” memory to KNIME as such, it simply tells KNIME what it is allowed to ask for:
- Set it too low, and if it wants more memory than it is allowed to ask for then you get a “relatively graceful” out of heap/memory message.
- BUT set it too high and if it then asks for more than is available… well rapid and unsaved exit, I’m afraid. It’s happened to me a couple of times.
[Edit: Actually I just thought through what I said about the component - I think String Manipulation (Multi Column) is the only solution that can be written generically to work with multiple columns, selected dynamically, without being forced to introduce a Column Append loop, so that’s the approach I think I will have to take]